Page({
  data:{   
    // 购物车数组         
    carts: [],
    // 商品的总价格
    totalPrice:0,
    // 结算的数量
    nums:0,
    // 全选
    allChecked:false
  },
  onShow(){
    const carts = wx.getStorageSync("carts") || [];
    this.setData({
      carts
    })
    this.countAll(carts);
  },
  // 计算总价格
  countAll(carts){
    let totalPrice = 0;
    let nums = 0;
    // 只要有一个商品没有被选中 它的值就是false
    let allChecked = true;
    carts.forEach(v=>{
      if(v.isChecked){
        // 计算总价格
        totalPrice +=v.nums*v.goods_price;
        // 计算总数量
        nums+=v.nums;
      }else{
        allChecked = false;
      }
    })
    this.setData({
      totalPrice,
      nums,
      allChecked
    })
  },
  // 单个商品的选中事件
  checkboxChange(e){
    // 需要知道用户点击的是哪一个商品，传索引
    const {index} = e.currentTarget.dataset;
    let {carts} = this.data;
    // 对选中的状态进行取反
    carts[index].isChecked = !carts[index].isChecked;
    // 将数组重新覆盖回缓存和data中
    this.setData({
      carts
    })
    wx.setStorageSync("carts",carts);
    // 重新计算总价格 小程序中页面没有计算属性，组件中有
    this.countAll(carts);
  },
  // 数量的编辑
  // 点击减号，执行数量减一
  // 点击加号，执行数量加一
  // 当数量大于等于库存的时候，提示用户
  // 当数量小于等于1时候，提示用户要不要删除
  handleNumUpdate(e){
    // index等于要编辑元素的索引
    const {index,unit} = e.currentTarget.dataset;
    let {carts} = this.data;
    // 判断三种情况
    // 第一种 点击加号，数量大于库存
    // 第二种 点击减号 数量等于1 询问用户要不要删除
    // 第三种 点击加号或者减号 增加或者减少
    if(unit === 1&&carts[index].nums>=carts[index].goods_number){
      wx.showToast({
        title: '库存不足了',
        icon: 'none',
        mask:true   
      });        
    }else if(unit===-1&&carts[index].nums===1){
      // 提示用户要不要删除商品
      wx.showModal({
        title: '警告',
        content: '你是否要删除商品',
        showCancel: true,
        cancelText: '取消',
        cancelColor: '#000000',
        confirmText: '确定',
        confirmColor: '#3CC51F',
        success: (result) => {
          if (result.confirm) {
            carts.splice(index,1)
            this.setData({
              carts
            })
            wx.setStorageSync("carts",carts);
            this.countAll(carts);
          }else{
            console.log("取消");
          }
        }
      });    
    }else{
      carts[index].nums +=unit;
      this.setData({
        carts
      })
      wx.setStorageSync("carts",carts);
      this.countAll(carts);
    }
  },
  // 全选按钮
  handleItemAll(){
    // 获取自己的选中状态
    let {allChecked,carts} = this.data;
    // 将自己的选中取反并赋值给其他单选框
    allChecked = !allChecked;
    carts.forEach(v=>v.isChecked = allChecked);
    this.setData({
      carts
    })
    wx.setStorageSync("carts",carts);
    this.countAll(carts);
  },
  // 结算事件
  goAccount(){
    // 跳转需要两个条件
    // 1 必须有收获地址 暂时没做
    // 2 必须有选中商品 可以通过选中商品数组的长度 也可以通过nums来做判断
    const {carts} = this.data;
    if(carts.filter(v=>v.isChecked).length===0){
      wx.showToast({
        title:"请选中要结算的商品",
        icon:"none",
        mask:true
      })
      return
    }
    wx.navigateTo({
      url: '/pages/pay/index',
    });
      
  }
})